class Solution {
public:
    bool st[11];//确定位数有没有用过
    int path[11];//存储路径
    int n;
    vector<vector<int>> res;
    void dfs(int u,vector<int>& nums)
    {
        if(u == n)
        {
            vector<int> r;
            for(int i = 0;i<n;++i)
            {
                r.push_back(path[i]);
            }
            res.push_back(r);
        }

        for(int i = 0;i < n; ++i) // i的遍历只代表 输出数组以nums[i]作为开头 在这层循环里面 u永远是1 然后起到找到所有情况的作用 画个树就明白了
        {       //其实就是 u = 1是第一层 1-- 2-- 3-- 4-- ....u=2就进入下一层 12- 13- 14- 逐层细化 分解问题 
            if(!st[i])
            {
                path[u] = nums[i];
                st[i] = true;
                dfs(u+1,nums);
                path[u] = 0;
                st[i] = false;
            }
        }
    }
    vector<vector<int>> permute(vector<int>& nums) {
            n  = nums.size();
            dfs(0,nums);
            return res;
    }
};
